<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>

        // 1.promise构造函数:promise(excutor)
        //  excutor函数:同步执行（resolve,reject)=>{}
        //  resolve函数：内部定义成功时我们调用的函数value=>{}
        //  reject函数:内部定义失败时我们调用的函数reason=>{}
        //  说明：excutor会在promise内部立即同步回调，异步操作在执行器中执行

        //  2.promise.prototype.then方法：(onResolved,onRejected)=>{}
        //  onResolved函数：成功时的回调函数(value)=>{}
        //  onRejected函数：失败时的回调函数(reson)=>{}
        //  说明：指定得到一个成功的value的成功回调用于得到失败reason的失败回调
        //        返回一个新的promise实例对象

        // 3.promise.prototype.catch方法:(onRejected)=>{}
        //  onRejected函数：失败的回调函数(reason)=>{}
        //  说明：then()的语法糖：相当于：then(undefined, onRejected)

        // new Promise((resolve, reject) => {
        //     setTimeout(() => {
        //         resolve(1)
        //     }, 1000)
        // }).then(
        //     value => console.log('onresolved', value),

        // ).catch(
        //     reason => console.log('rejected', reason),
        // )


        // 4.Promise.resolve方法：(value)=>{}
        // value:成功的数据或promise对象
        // 说明：返回一个成功的promise对象

        // let p1 = new Promise((resolve, reject) => {
        //     setTimeout(() => {
        //         reject(1)
        //     }, 1000)
        // })
        // let p2 = Promise.reject(2)
        // let p3 = Promise.resolve(3)
        // console.log(p3);

        // 5.Promise.reject方法：(value)=>{}
        // reason:的数据或promise对象
        // 说明：返回一个失败的promise对象

        //6.Promise.all方法:(promise)=>{}
        // promise:包含n个promise数组
        // 说明：返回一个新的promise,只有所有的promise都成功时才成功，只要有一个失败了就直接失败了

        //7.promise.race方法:(promise)=>{}
        // promise:包含n个promise数组
        // 说明：返回一个新的promise,第一个完成的promise的结果状态就是最终的结果状态

        let p1 = new Promise((resolve, reject) => {
            setTimeout(() => {
                reject(1)
                // resolve(1)
            }, 1000)
            // reject(1)
        })
        let p2 = Promise.resolve(2)
        let p3 = Promise.resolve(3)

        // let p4 = Promise.all([p1, p2, p3])
        // p4.then(
        //     values => console.log('成功的回调用了', values),
        //     reason => console.log('失败的回调用了', reason),
        // )

        let p5 = Promise.race([p1, p2, 3])
        p5.then(
            value => console.log('成功的回调用了', value),
            reason => console.log('失败的回调用了', reason),
        )


    </script>
</body>

</html>